module.exports = function (grunt) {
	/**
	 * Load tasks
	 */
	grunt.loadTasks('tasks');
	grunt.loadNpmTasks('grunt-prompt');
	grunt.loadNpmTasks('grunt-contrib-clean');
	grunt.loadNpmTasks('grunt-mkdir');

	/**
	 * Grunt config
	 */
	grunt.initConfig({
		pkg: require('./package.json'),

		clean: {
			build: {
				src: ['build']
			}
		},

		mkdir: {
			build: {
				options: {
					create: ['build']
				}
			}
		},

		generator: {
			settings: {
				mixin_name: null,
				default_value: null,
				vendors: null
			}
		},
		
		version: {
			settings: {
				version: null
			}
		},

		prompt: {
			version: {
				options: {
					questions: [
						{
							config: 'version.settings.version',
							type: 'input',
							validate: function (value) {
								return (value && true);
							},
							message: 'LESS Hat next version number? Current is ' + '<%= pkg.version %>'.green + ':'
						}
					]
				}
			},
			generate: {
				options: {
					questions: [
						{
							config: 'generator.settings.mixin_name',
							type: 'input',
							message: 'What is the name of new mixin? (e.g. animationDelay)',
							filter: function (value) {
								grunt.config('generator.settings.mixin_css_name', value.replace(/([A-Z])/g, function (upperCase) {
									return '-' + upperCase.toLowerCase();
								}));
								grunt.config('generator.settings.mixin_name | firstLetter', value[0].toUpperCase() + value.slice(1));
								return value[0].toLowerCase() + value.slice(1);
							},
							validate: function (value) {
								if (/[a-z0-9]+/i.test(value)) {
									return true;
								} else {
									return 'Please fill only valid characters [a-zA-Z0-9].';
								}
							}
						},
						{
							config: 'generator.settings.vendors',
							type: 'checkbox',
							message: 'For which browsers is this mixin?',
							choices: [
								{name: 'webkit'},
								{name: 'moz'},
								{name: 'opera'},
								{name: 'ms'}
							]
						},
						{
							config: 'generator.settings.default_value',
							type: 'input',
							default: 'none',
							filter: function (value) {
								return '\'' + value + '\'';
							},
							message: 'What is default value of the mixin? Optional – you can skip'
						}
					]
				}
			}
		}
	});

	/**
	 * Register tasks
	 */

	grunt.registerTask('version', ['prompt:version', 'iterate', 'build', 'mixins_update']);
	grunt.registerTask('setup', ['clean', 'mkdir']);
	grunt.registerTask('dev', ['setup', 'build', 'test']);
	grunt.registerTask('generate', ['prompt:generate', 'generator']);
	grunt.registerTask('contrib', ['setup', 'build', 'test', 'mixins_update', 'prefix', 'documentation']);
	grunt.registerTask('default', ['setup', 'build', 'test', 'mixins_update', 'prefix', 'documentation']);

};
